<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>111_数组方法_高阶函数</title>
		<script>
			/* 
			sort( )
				- sort用来对数组进行排序(会对改变原数组)
				- sort默认会将数组升序排列
					注意:sort默认会按照Unicode编码进行排序，所以如果直接通过sort对数字进行排序
					可能会得到一个不正确的结果。
				
				-参数:
				-可以传递一个回调函数作为参数，通过回调函数来指定排序规则
					(a,b) => a - b升序排列
					(a，b) => b -a降序排列
				
				forEach()
					- 用来遍历数组
					- 它需要一个回调函数作为参数，这个回调函数会被调用多次I
						数组中有几个元素，回调函数就会调用几次.
					-回调函数中有三个参数
						element 当前的元素
						index 当前元素的索引
						array 被遍历的数组
					
				filter()
					-将数组中符合条件的元素保存到一个新数组中返回;
					-需要一个回调函数作为参数，会为每一个元素去调用回调函数，
						并根据返回值来决定是否将元素添加到新数组中;
					-非破坏性方法，不会影响原数组;
					-回调函数中有三个参数
						element 当前的元素
						index 当前元素的索引
						array 被遍历的数组
				
				map( )
					map( )
					- 根据当前数组生成一个新数组
					- 需要一个回调函数作为参数，
						回调函数的返回值会成为新数组中的元素I
					-非破坏性方法不会影响原数组
					-回调函数中有三个参数:
						element 当前的元素
						index   当前元素的索引
						array   被遍历的数组
				
				reduce( )
					- 可以用来将一个数组中的所有元素整合为一个值
					-参数:
						1.回调函数，通过回调函数来指定合并的规则
						2.可选参数，初始值
				
				如何知道回调有几个参数：
					比如forEach中回调函数有几个参数?
					arr.forEach((a, b, c, d) => {
						console.log(a,b,c,d);//1 0  ['1', '2', '3', '4', '5', '9'] undefined
						可以看到最后一个是undefined，所以只有3个参数。
					})
			 */
			let arr = ["a", "c", "e", "f", "d", "b"]
			arr = ['2', '1', '3', '4', '9', '5']
			//arr.sort();
			arr.sort((a, b) => a - b)
			//arr.sort((a, b) => b - a)

			console.log("sort....", arr);

			arr = ["孙悟空", "西游记", "唐僧"]
			arr.forEach((element, index) => {
				console.log(element + '-' + index);
			})

			arr = ['2', '1', '3', '4', '9', '5']
			//获取数组中的所有偶数
			arr = arr.filter((element) => {
				return element % 2 === 0;
			})

			arr = [1, 3, 5, 3, 8]
			ret = arr.map((ele, index, array) => {
				return ele * 2;
			})
			arr = ["孙悟空", "西游记", "唐僧"]
			ret = arr.map(ele => "<li>" + ele + "</li>")

			arr = [1, 3, 5, 3, 8]
			//把所有数组元素相加
			//第一次是a=1,b=3
			//第二次是a是上一次执行的结果，b是5，直至所有的元素遍历完。
			ret = arr.reduce((a, b) => a + b);
			//第一个参数是闭包，第二个参数是初始值
			//第一次a是初始值10,b=1
			//第二次是a是上一次执行的结果，b是5，直至所有的元素遍历完。
			ret = arr.reduce((a, b) => a + b, 10)
			console.log(ret);
		</script>
	</head>
	<body>
	</body>
</html>